package social.server.main;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Vector;

public class Thread {
	
	private String subject;
	private Date date;
	private Vector<String> users = new Vector<String>();
	private List<Post> vector = new ArrayList<Post>();

	
	/**
	 * O Construtor padrão da classe Thread.
	 * @param subject Assunto da Thread.
	 * @param userId O login do criador da Thread.
	 * @param userId2 O login do segundo usuário relacionado a Thread.
	 */
	public Thread(String subject, String userId,String userId2)  {
		super();
		setSubject(subject);
		users.add(userId);
		users.add(userId2);
		setDate(new Date());
	}
	/**
	 * Adiciona um Post à Thread
	 * @param post Post a ser adicionado;
	 */
	public void add(Post post) {
		vector.add(post);
		setDate(post.getDate());
		
	}

	private void setDate(Date date) {
		this.date = date;
		
	}
	/**
	 * Remove um post.
	 * @param post O post a ser removido.
	 */
	public void remove(Post post) {
		vector.remove(post);
		
	}
	/**
	 * Verifica se a Thread contém um determinado Post.
	 * @param post O Post a ser pesquisado.
	 * @return true se contém, false se não.
	 */
	public boolean contains(Post post) {
		if (vector.contains(post))
			return true;
		return false;
	}
	/**
	 * Verifica se um usuário participa da Thread.
	 * @param userId Login do usuário.
	 * @return
	 */
	public boolean isAuthor(String userId) {
		if (users.contains(userId))
			return true;
		return false;
	}
	/**
	 * Retorna o tamanho da Thread.
	 * @return Um int tamanho.
	 */
	public int size() {
		return vector.size();
	}
	/**
	 * Retorna o assunto da Thread
	 * @return Uma String assunto.
	 */
	public String getSubject() {
		return subject;
	}

	private void setSubject(String subject) {
		this.subject = subject;
	}
	/**
	 * Retorna a lista de participantes da Thread.
	 * @return String com os logins dos participantes.
	 */
	public String getUsers() {
		String retorno = "";
		for (int i = 0; i<users.size();i++){
			retorno = retorno.concat(users.get(i));
			retorno = retorno.concat(", ");
		}
		return retorno;
	}
	/**
	 * Retorna a data da última modificação da Thread.
	 * @return Objeto Date.
	 */
	public Date getDate() {
		return date;
	}
	/**
	 * Retorna uma represenação String do objeto.
	 */
	@Override
	public String toString() {
		String retorno = "";
		for (int i = 0; i < size(); i++){
			retorno = retorno.concat("; ");
			retorno = retorno.concat(vector.get(i).getMessage());
		}
		return retorno.substring(2);
	}	
}
